home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_perl.idb / usr / freeware / catman / p_man / cat3 / Math::Complex.Z / Math::Complex
Encoding:
Text File  |  1998-10-28  |  19.4 KB  |  595 lines

  1.  
  2.  
  3.  
  4.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  5.  
  6.  
  7.  
  8.      NNNNAAAAMMMMEEEE
  9.       Math::Complex    - complex numbers and associated mathematical
  10.       functions
  11.  
  12.      SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.           use Math::Complex;
  14.  
  15.           $z = Math::Complex->make(5, 6);
  16.           $t = 4 - 3*i + $z;
  17.           $j = cplxe(1,    2*pi/3);
  18.  
  19.  
  20.      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  21.       This package lets you    create and manipulate complex numbers.
  22.       By default, _P_e_r_l limits itself to real numbers, but an extra
  23.       use statement    brings full complex support, along with    a full
  24.       set of mathematical functions    typically associated with
  25.       and/or extended to complex numbers.
  26.  
  27.       If you wonder    what complex numbers are, they were invented
  28.       to be    able to    solve the following equation:
  29.  
  30.           x*x =    -1
  31.  
  32.       and by definition, the solution is noted _i (engineers    use _j
  33.       instead since    _i usually denotes an intensity,    but the    name
  34.       does not matter). The    number _i is a pure _i_m_a_g_i_n_a_r_y number.
  35.  
  36.       The arithmetics with pure imaginary numbers works just like
  37.       you would expect it with real    numbers... you just have to
  38.       remember that
  39.  
  40.           i*i =    -1
  41.  
  42.       so you have:
  43.  
  44.           5i + 7i = i *    (5 + 7)    = 12i
  45.           4i - 3i = i *    (4 - 3)    = i
  46.           4i * 2i = -8
  47.           6i / 2i = 3
  48.           1 / i    = -i
  49.  
  50.       Complex numbers are numbers that have    both a real part and
  51.       an imaginary part, and are usually noted:
  52.  
  53.           a + bi
  54.  
  55.       where    a is the _r_e_a_l part and b is the    _i_m_a_g_i_n_a_r_y part.    The
  56.       arithmetic with complex numbers is straightforward. You have
  57.       to keep track    of the real and    the imaginary parts, but
  58.       otherwise the    rules used for real numbers just apply:
  59.  
  60.  
  61.  
  62.  
  63.      Page 1                        (printed 10/23/98)
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  71.  
  72.  
  73.  
  74.           (4 + 3i) + (5    - 2i) =    (4 + 5)    + i(3 -    2) = 9 + i
  75.           (2 + i) * (4 - i) = 2*4 + 4i -2i -i*i    = 8 + 2i + 1 = 9 + 2i
  76.  
  77.       A graphical representation of    complex    numbers    is possible in
  78.       a plane (also    called the _c_o_m_p_l_e_x _p_l_a_n_e, but it's really a 2D
  79.       plane).  The number
  80.  
  81.           z = a    + bi
  82.  
  83.       is the point whose coordinates are (a, b). Actually, it
  84.       would    be the vector originating from (0, 0) to (a, b). It
  85.       follows that the addition of two complex numbers is a
  86.       vectorial addition.
  87.  
  88.       Since    there is a bijection between a point in    the 2D plane
  89.       and a    complex    number (i.e. the mapping is unique and
  90.       reciprocal), a complex number    can also be uniquely
  91.       identified with polar    coordinates:
  92.  
  93.           [rho,    theta]
  94.  
  95.       where    rho is the distance to the origin, and theta the angle
  96.       between the vector and the _x axis. There is a    notation for
  97.       this using the exponential form, which is:
  98.  
  99.           rho *    exp(i *    theta)
  100.  
  101.       where    _i is the famous    imaginary number introduced above.
  102.       Conversion between this form and the cartesian form a    + bi
  103.       is immediate:
  104.  
  105.           a = rho * cos(theta)
  106.           b = rho * sin(theta)
  107.  
  108.       which    is also    expressed by this formula:
  109.  
  110.           z = rho * exp(i * theta) = rho * (cos    theta +    i * sin    theta)
  111.  
  112.       In other words, it's the projection of the vector onto the _x
  113.       and _y    axes. Mathematicians call _r_h_o the _n_o_r_m or _m_o_d_u_l_u_s and
  114.       _t_h_e_t_a    the _a_r_g_u_m_e_n_t of    the complex number. The    _n_o_r_m of    z will
  115.       be noted abs(z).
  116.  
  117.       The polar notation (also known as the    trigonometric
  118.       representation) is much more handy for performing
  119.       multiplications and divisions    of complex numbers, whilst the
  120.       cartesian notation is    better suited for additions and
  121.       subtractions.    Real numbers are on the    _x axis,    and therefore
  122.       _t_h_e_t_a    is zero    or _p_i.
  123.  
  124.       All the common operations that can be    performed on a real
  125.       number have been defined to work on complex numbers as well,
  126.  
  127.  
  128.  
  129.      Page 2                        (printed 10/23/98)
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  137.  
  138.  
  139.  
  140.       and are merely _e_x_t_e_n_s_i_o_n_s of the operations defined on real
  141.       numbers. This    means they keep    their natural meaning when
  142.       there    is no imaginary    part, provided the number is within
  143.       their    definition set.
  144.  
  145.       For instance,    the sqrt routine which computes    the square
  146.       root of its argument is only defined for non-negative    real
  147.       numbers and yields a non-negative real number    (it is an
  148.       application from RRRR++++ to RRRR++++).  If we allow it to return    a
  149.       complex number, then it can be extended to negative real
  150.       numbers to become an application from    RRRR to CCCC (the set    of
  151.       complex numbers):
  152.  
  153.           sqrt(x) = x >= 0 ? sqrt(x) : sqrt(-x)*i
  154.  
  155.       It can also be extended to be    an application from CCCC to CCCC,
  156.       whilst its restriction to RRRR behaves as defined above by
  157.       using    the following definition:
  158.  
  159.           sqrt(z = [r,t]) = sqrt(r) * exp(i * t/2)
  160.  
  161.       Indeed, a negative real number can be    noted [x,pi] (the
  162.       modulus _x is always non-negative, so [x,pi] is really    -x, a
  163.       negative number) and the above definition states that
  164.  
  165.           sqrt([x,pi]) = sqrt(x) * exp(i*pi/2) = [sqrt(x),pi/2]    = sqrt(x)*i
  166.  
  167.       which    is exactly what    we had defined for negative real
  168.       numbers above.  The sqrt returns only    one of the solutions:
  169.       if you want the both,    use the    root function.
  170.  
  171.       All the common mathematical functions    defined    on real
  172.       numbers that are extended to complex numbers share that same
  173.       property of working _a_s _u_s_u_a_l when the    imaginary part is zero
  174.       (otherwise, it would not be called an    extension, would it?).
  175.  
  176.       A _n_e_w    operation possible on a    complex    number that is the
  177.       identity for real numbers is called the _c_o_n_j_u_g_a_t_e, and is
  178.       noted    with an    horizontal bar above the number, or ~z here.
  179.  
  180.            z = a + bi
  181.           ~z = a - bi
  182.  
  183.       Simple... Now    look:
  184.  
  185.           z * ~z = (a +    bi) * (a - bi) = a*a + b*b
  186.  
  187.       We saw that the norm of z was    noted abs(z) and was defined
  188.       as the distance to the origin, also known as:
  189.  
  190.           rho =    abs(z) = sqrt(a*a + b*b)
  191.  
  192.  
  193.  
  194.  
  195.      Page 3                        (printed 10/23/98)
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  203.  
  204.  
  205.  
  206.       so
  207.  
  208.           z * ~z = abs(z) ** 2
  209.  
  210.       If z is a pure real number (i.e. b ==    0), then the above
  211.       yields:
  212.  
  213.           a * a    = abs(a) ** 2
  214.  
  215.       which    is true    (abs has the regular meaning for real number,
  216.       i.e. stands for the absolute value). This example explains
  217.       why the norm of z is noted abs(z): it    extends    the abs
  218.       function to complex numbers, yet is the regular abs we know
  219.       when the complex number actually has no imaginary part...
  220.       This justifies _a _p_o_s_t_e_r_i_o_r_i our use of the abs notation for
  221.       the norm.
  222.  
  223.      OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNNSSSS
  224.       Given    the following notations:
  225.  
  226.           z1 = a + bi =    r1 * exp(i * t1)
  227.           z2 = c + di =    r2 * exp(i * t2)
  228.           z = <any complex or real number>
  229.  
  230.       the following    (overloaded) operations    are supported on
  231.       complex numbers:
  232.  
  233.           z1 + z2 = (a + c) + i(b + d)
  234.           z1 - z2 = (a - c) + i(b - d)
  235.           z1 * z2 = (r1    * r2) *    exp(i *    (t1 + t2))
  236.           z1 / z2 = (r1    / r2) *    exp(i *    (t1 - t2))
  237.           z1 **    z2 = exp(z2 * log z1)
  238.           ~z = a - bi
  239.           abs(z) = r1 =    sqrt(a*a + b*b)
  240.           sqrt(z) = sqrt(r1) * exp(i * t/2)
  241.           exp(z) = exp(a) * exp(i * b)
  242.           log(z) = log(r1) + i*t
  243.           sin(z) = 1/2i    (exp(i * z1) - exp(-i *    z))
  244.           cos(z) = 1/2 (exp(i *    z1) + exp(-i * z))
  245.           atan2(z1, z2)    = atan(z1/z2)
  246.  
  247.       The following    extra operations are supported on both real
  248.       and complex numbers:
  249.  
  250.           Re(z)    = a
  251.           Im(z)    = b
  252.           arg(z) = t
  253.           abs(z) = r
  254.  
  255.           cbrt(z) = z ** (1/3)
  256.           log10(z) = log(z) / log(10)
  257.           logn(z, n) = log(z) /    log(n)
  258.  
  259.  
  260.  
  261.      Page 4                        (printed 10/23/98)
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  269.  
  270.  
  271.  
  272.           tan(z) = sin(z) / cos(z)
  273.  
  274.           csc(z) = 1 / sin(z)
  275.           sec(z) = 1 / cos(z)
  276.           cot(z) = 1 / tan(z)
  277.  
  278.           asin(z) = -i * log(i*z + sqrt(1-z*z))
  279.           acos(z) = -i * log(z + i*sqrt(1-z*z))
  280.           atan(z) = i/2    * log((i+z) / (i-z))
  281.  
  282.           acsc(z) = asin(1 / z)
  283.           asec(z) = acos(1 / z)
  284.           acot(z) = atan(1 / z)    = -i/2 * log((i+z) / (z-i))
  285.  
  286.           sinh(z) = 1/2    (exp(z)    - exp(-z))
  287.           cosh(z) = 1/2    (exp(z)    + exp(-z))
  288.           tanh(z) = sinh(z) / cosh(z) =    (exp(z)    - exp(-z)) / (exp(z) + exp(-z))
  289.  
  290.           csch(z) = 1 /    sinh(z)
  291.           sech(z) = 1 /    cosh(z)
  292.           coth(z) = 1 /    tanh(z)
  293.  
  294.           asinh(z) = log(z + sqrt(z*z+1))
  295.           acosh(z) = log(z + sqrt(z*z-1))
  296.           atanh(z) = 1/2 * log((1+z) / (1-z))
  297.  
  298.           acsch(z) = asinh(1 / z)
  299.           asech(z) = acosh(1 / z)
  300.           acoth(z) = atanh(1 / z) = 1/2    * log((1+z) / (z-1))
  301.  
  302.       _a_r_g, _a_b_s, _l_o_g, _c_s_c, _c_o_t, _a_c_s_c, _a_c_o_t, _c_s_c_h, _c_o_t_h, _a_c_o_s_e_c_h,
  303.       _a_c_o_t_a_n_h, have    aliases    _r_h_o, _t_h_e_t_a, _l_n,    _c_o_s_e_c, _c_o_t_a_n, _a_c_o_s_e_c,
  304.       _a_c_o_t_a_n, _c_o_s_e_c_h, _c_o_t_a_n_h, _a_c_o_s_e_c_h, _a_c_o_t_a_n_h, respectively.  Re,
  305.       Im, arg, abs,    rho, and theta can be used also    also mutators.
  306.       The cbrt returns only    one of the solutions: if you want all
  307.       three, use the root function.
  308.  
  309.       The _r_o_o_t function is available to compute all    the _n roots of
  310.       some complex,    where _n    is a strictly positive integer.     There
  311.       are exactly _n    such roots, returned as    a list.    Getting    the
  312.       number mathematicians    call j such that:
  313.  
  314.           1 + j    + j*j =    0;
  315.  
  316.       is a simple matter of    writing:
  317.  
  318.           $j = ((root(1, 3))[1];
  319.  
  320.       The _kth root for z = [r,t] is    given by:
  321.  
  322.           (root(z, n))[k] = r**(1/n) * exp(i * (t + 2*k*pi)/n)
  323.  
  324.  
  325.  
  326.  
  327.      Page 5                        (printed 10/23/98)
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  335.  
  336.  
  337.  
  338.       The _s_p_a_c_e_s_h_i_p    comparison operator, <=>, is also defined. In
  339.       order    to ensure its restriction to real numbers is conform
  340.       to what you would expect, the    comparison is run on the real
  341.       part of the complex number first, and    imaginary parts    are
  342.       compared only    when the real parts match.
  343.  
  344.      CCCCRRRREEEEAAAATTTTIIIIOOOONNNN
  345.       To create a complex number, use either:
  346.  
  347.           $z = Math::Complex->make(3, 4);
  348.           $z = cplx(3, 4);
  349.  
  350.       if you know the cartesian form of the    number,    or
  351.  
  352.           $z = 3 + 4*i;
  353.  
  354.       if you like. To create a number using    the polar form,    use
  355.       either:
  356.  
  357.           $z = Math::Complex->emake(5, pi/3);
  358.           $x = cplxe(5,    pi/3);
  359.  
  360.       instead. The first argument is the modulus, the second is
  361.       the angle (in    radians, the full circle is 2*pi).  (Mnemonic:
  362.       e is used as a notation for complex numbers in the polar
  363.       form).
  364.  
  365.       It is    possible to write:
  366.  
  367.           $x = cplxe(-3, pi/4);
  368.  
  369.       but that will    be silently converted into [3,-3pi/4], since
  370.       the modulus must be non-negative (it represents the distance
  371.       to the origin    in the complex plane).
  372.  
  373.       It is    also possible to have a    complex    number as either
  374.       argument of either the make or emake:    the appropriate
  375.       component of the argument will be used.
  376.  
  377.           $z1 =    cplx(-2,  1);
  378.           $z2 =    cplx($z1, 4);
  379.  
  380.  
  381.      SSSSTTTTRRRRIIIINNNNGGGGIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  382.       When printed,    a complex number is usually shown under    its
  383.       cartesian form _a+_b_i, but there are legitimate    cases where
  384.       the polar format [_r,_t] is more appropriate.
  385.  
  386.       By calling the routine Math::Complex::display_format and
  387.       supplying either "polar" or "cartesian", you override    the
  388.       default display format, which    is "cartesian".    Not supplying
  389.       any argument returns the current setting.
  390.  
  391.  
  392.  
  393.      Page 6                        (printed 10/23/98)
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  401.  
  402.  
  403.  
  404.       This default can be overridden on a per-number basis by
  405.       calling the display_format method instead. As    before,    not
  406.       supplying any    argument returns the current display format
  407.       for this number. Otherwise whatever you specify will be the
  408.       new display format for _t_h_i_s particular number.
  409.  
  410.       For instance:
  411.  
  412.           use Math::Complex;
  413.  
  414.           Math::Complex::display_format('polar');
  415.           $j = ((root(1, 3))[1];
  416.           print    "j = $j\n";          # Prints "j =    [1,2pi/3]
  417.           $j->display_format('cartesian');
  418.           print    "j = $j\n";          # Prints "j =    -0.5+0.866025403784439i"
  419.  
  420.       The polar format attempts to emphasize arguments like    _k*_p_i/_n
  421.       (where _n is a    positive integer and _k an integer within
  422.       [-9,+9]).
  423.  
  424.      UUUUSSSSAAAAGGGGEEEE
  425.       Thanks to overloading, the handling of arithmetics with
  426.       complex numbers is simple and    almost transparent.
  427.  
  428.       Here are some    examples:
  429.  
  430.           use Math::Complex;
  431.  
  432.           $j = cplxe(1,    2*pi/3);  # $j ** 3 == 1
  433.           print    "j = $j, j**3 =    ", $j ** 3, "\n";
  434.           print    "1 + j + j**2 =    ", 1 + $j + $j**2, "\n";
  435.  
  436.           $z = -16 + 0*i;          # Force it to    be a complex
  437.           print    "sqrt($z) = ", sqrt($z), "\n";
  438.  
  439.           $k = exp(i * 2*pi/3);
  440.           print    "$j - $k = ", $j - $k, "\n";
  441.  
  442.           $z->Re(3);              # Re,    Im, arg, abs,
  443.           $j->arg(2);              # (the last two aka rho, theta)
  444.                           # can    be used    also as    mutators.
  445.  
  446.  
  447.      EEEERRRRRRRROOOORRRRSSSS DDDDUUUUEEEE    TTTTOOOO DDDDIIIIVVVVIIIISSSSIIIIOOOONNNN BBBBYYYY ZZZZEEEERRRROOOO OOOORRRR LLLLOOOOGGGGAAAARRRRIIIITTTTHHHHMMMM OOOOFFFF ZZZZEEEERRRROOOO
  448.       The division (/) and the following functions
  449.  
  450.           log      ln      log10      logn
  451.           tan      sec      csc      cot
  452.           atan      asec      acsc      acot
  453.           tanh      sech      csch      coth
  454.           atanh      asech      acsch      acoth
  455.  
  456.  
  457.  
  458.  
  459.      Page 7                        (printed 10/23/98)
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  467.  
  468.  
  469.  
  470.       cannot be computed for all arguments because that would mean
  471.       dividing by zero or taking logarithm of zero.    These
  472.       situations cause fatal runtime errors    looking    like this
  473.  
  474.           cot(0): Division by zero.
  475.           (Because in the definition of    cot(0),    the divisor sin(0) is 0)
  476.           Died at ...
  477.  
  478.       or
  479.  
  480.           atanh(-1): Logarithm of zero.
  481.           Died at...
  482.  
  483.       For the csc, cot, asec, acsc,    acot, csch, coth, asech,
  484.       acsch, the argument cannot be    0 (zero).  For the the
  485.       logarithmic functions    and the    atanh, acoth, the argument
  486.       cannot be 1 (one).  For the atanh, acoth, the    argument
  487.       cannot be -1 (minus one).  For the atan, acot, the argument
  488.       cannot be i (the imaginary unit).  For the atan, acoth, the
  489.       argument cannot be -i    (the negative imaginary    unit).    For
  490.       the tan, sec,    tanh, the argument cannot be _p_i/_2 + _k *    _p_i,
  491.       where    _k is any integer.
  492.  
  493.       Note that because we are operating on    approximations of real
  494.       numbers, these errors    can happen when    merely `too close' to
  495.       the singularities listed above.  For example
  496.       tan(2*atan2(1,1)+1e-15) will die of division by zero.
  497.  
  498.      EEEERRRRRRRROOOORRRRSSSS DDDDUUUUEEEE    TTTTOOOO IIIINNNNDDDDIIIIGGGGEEEESSSSTTTTIIIIBBBBLLLLEEEE    AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  499.       The make and emake accept both real and complex arguments.
  500.       When they cannot recognize the arguments they    will die with
  501.       error    messages like the following
  502.  
  503.           Math::Complex::make: Cannot take real part of ...
  504.           Math::Complex::make: Cannot take real part of ...
  505.           Math::Complex::emake: Cannot take    rho of ...
  506.           Math::Complex::emake: Cannot take    theta of ...
  507.  
  508.  
  509.      BBBBUUUUGGGGSSSS
  510.       Saying use Math::Complex; exports many mathematical routines
  511.       in the caller    environment and    even overrides some (sqrt,
  512.       log).     This is construed as a    feature    by the Authors,
  513.       actually... ;-)
  514.  
  515.       All routines expect to be given real or complex numbers.
  516.       Don't    attempt    to use BigFloat, since Perl has    currently no
  517.       rule to disambiguate a '+' operation (for instance) between
  518.       two overloaded entities.
  519.  
  520.       In Cray UNICOS there is some strange numerical instability
  521.       that results in _r_o_o_t(), _c_o_s(), _s_i_n(),    _c_o_s_h(),    _s_i_n_h(),    losing
  522.  
  523.  
  524.  
  525.      Page 8                        (printed 10/23/98)
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.      MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333)))) 1111////AAAAuuuugggg////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx((((3333))))
  533.  
  534.  
  535.  
  536.       accuracy fast.  Beware.  The bug may be in UNICOS math libs,
  537.       in UNICOS C compiler,    in Math::Complex.  Whatever it is, it
  538.       does not manifest itself anywhere else where Perl runs.
  539.  
  540.      AAAAUUUUTTTTHHHHOOOORRRRSSSS
  541.       Raphael Manfredi <_R_a_p_h_a_e_l__M_a_n_f_r_e_d_i@_g_r_e_n_o_b_l_e._h_p._c_o_m> and
  542.       Jarkko Hietaniemi <_j_h_i@_i_k_i._f_i>.
  543.  
  544.       Extensive patches by Daniel S. Lewart    <_d-_l_e_w_a_r_t@_u_i_u_c._e_d_u>.
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.      Page 9                        (printed 10/23/98)
  592.  
  593.  
  594.  
  595.